Argumente von Unterprogrammen

Die Subroutine QuadratFesterLänge() ist unflexibel, weil es immer an der gleichen Position ein Quadrat der gleichen Länge zeichnet. Der Aufruf eines allgemeineren Unterprogramms, das ein Quadrate mit beliebiger Position und Länge zeichnet lautet zum Beispiel ...

Quadrat 200,100, 100

Diese Anweisung zeichnet vom Punkt (200,100) ein Quadrat der Seitenlänge 100. Im Gegensatz zum Aufruf stehen in der folgenden Vereinbarung die Argumente in runden Klammern:

Sub Quadrat(X As Integer,Y As Integer, Seite As Integer)
  With Ausgabeblatt.Shapes
    .AddLine(X,Y, X+Seite,Y).Visible = True
    .AddLine(X+Seite,Y, X+Seite,Y+Seite).Visible = True
    .AddLine(X+Seite,Y+Seite, X,Y+Seite).Visible = True
    .AddLine(X,Y+Seite, X,Y).Visible = True
  End With
End Sub

Anders als in der Vereinbarung von QuadratFesterLänge() folgt dem Unterprogrammnamen kein leeres Klammernpaar, sondern drei Argumente, jedes von der Form <Variablenname> As <Datentyp>. Allgemein beginnt die Vereinbarung einer Subroutine wie folgt:

Sub <Name der Subroutine>( <Variablenname> As <Datentyp>, ... ).

Ausserdem enthalten die Geradenanweisungen der Subroutine Quadrat statt Zahlenkonstanten Argumentnamen wie X, Y und Seite. Zu jeder vereinbarten Argumentvariable gehört ein Datentyp, der dem Übersetzer (Compiler) ermöglicht, Aufruffehler zu erkennen. Die folgenden Aufrufe akzeptiert der Compiler zum Beispiel nicht. Der erste Aufruf enthält zwei statt drei Argumente, und der zweite Aufruf übergibt im zweiten Argument einen falschen Datentyp:

Quadrat 200,100
Quadrat "200","oha lätz", 100

Argumente (Parameter) erlauben ein vorausschauendes Programmieren. Wenn wir zum Beispiel vermuten, dass ein künftiger Benutzer ein Quadrat auch auf einem Arbeitsblatt mit anderem Namen als Ausgabeblatt ausgeben möchte, dann erweitern wir die Deklaration von Quadrat um ein Argument Blattname:

Quadrat(
  Blattname As String,
  X As Integer, Y As Integer, Seite As Integer)

Um die Subroutine Quadrat möglichst vielen anderen Projekten zugänglich zu machen, haben wir also die ursprüngliche Version QuadratFesterLänge() zuerst um die Argumente X, Y und Seite erweitert und dann das Argument Blattname hinzugefügt. Diese allgemeinste Version der Subroutine steht in Quadrat.xls. Wir werden sie in andere Arbeitsmappen übernehmen, indem wir im Menüpunkt Extras/Verweise der Entwicklungsumgebung auf sie verweisen.

Der Aufruf Quadrat 200,100, 100 übergibt seine drei Argumente als Konstanten. Eine solche Übergabe ist problemlos. Lautet der Aufruf aber Quadrat X,Y,Länge und sind X, Y und Länge Variablen des aufrufenden Programms, dann lässt sich jede der Variablen auf zwei Arten interpretieren:

Funktion erklärt diesen Unterschied an einem Beispiel.